﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using source;
using MySql.Data.MySqlClient;

namespace DAL
{
    partial class DAL
    {
        public class KorisnikDAO : IDaoCrud<Korisnik>
        {
            #region IDaoCrud<Korisnik> Members
            protected MySqlCommand c;
            public long create(Korisnik entity)
            {
                try
                {
                    c = new MySqlCommand("insert into korisnik (username, password, tip, ime, prezime, jmbg, datum_rodjenja, adresa, telefon, email, drzavljanstvo, slika) values (@Username, @Password, @Tip, @Ime, @Prezime, @JMBG, @DatumRodjenja, @Adresa, @Telefon, @Email, @Drzavljanstvo, @Slika);", con);
                    c.Parameters.AddWithValue("@Username", entity.Username);
                    c.Parameters.AddWithValue("@Password", entity.Password);
                    c.Parameters.AddWithValue("@Tip", entity.Tip);
                    c.Parameters.AddWithValue("@Ime", entity.Ime);
                    c.Parameters.AddWithValue("@Prezime", entity.Prezime);
                    c.Parameters.AddWithValue("@JMBG", entity.JMBG);
                    c.Parameters.AddWithValue("@DatumRodjenja", entity.DatumRodjenja);
                    c.Parameters.AddWithValue("@Adresa", entity.Adresa);
                    c.Parameters.AddWithValue("@Telefon", entity.Telefon);
                    c.Parameters.AddWithValue("@Email", entity.Email);
                    c.Parameters.AddWithValue("@Drzavljanstvo", entity.Drzavljanstvo);
                    c.Parameters.AddWithValue("@Slika", entity.Slika);
                    c.ExecuteNonQuery();
                    return c.LastInsertedId;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Korisnik> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik;", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Korisnik> korisnici = new List<Korisnik>();
                    while (r.Read())
                    {
                        Korisnik korisnik = new Korisnik();
                        korisnik.ID = r.GetInt32("id");
                        korisnik.Username = r.GetString("username");
                        korisnik.Password = r.GetString("password");
                        korisnik.Tip = r.GetString("tip");
                        korisnik.Ime = r.GetString("ime");
                        korisnik.Prezime = r.GetString("prezime");
                        korisnik.JMBG = r.GetString("jmbg");
                        korisnik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        korisnik.Adresa = r.GetString("adresa");
                        korisnik.Telefon = r.GetString("telefon");
                        korisnik.Email = r.GetString("email");
                        korisnik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        korisnik.Slika = r.GetString("slika");
                        korisnici.Add(korisnik);
                    }
                    r.Close();
                    c.Dispose();
                    return korisnici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Korisnik read(Korisnik entity)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    MySqlDataReader r = c.ExecuteReader();
                    Korisnik korisnik = new Korisnik();
                    if (r.Read())
                    {
                        korisnik.ID = r.GetInt32("id");
                        korisnik.Username = r.GetString("username");
                        korisnik.Password = r.GetString("password");
                        korisnik.Tip = r.GetString("tip");
                        korisnik.Ime = r.GetString("ime");
                        korisnik.Prezime = r.GetString("prezime");
                        korisnik.JMBG = r.GetString("jmbg");
                        korisnik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        korisnik.Adresa = r.GetString("adresa");
                        korisnik.Telefon = r.GetString("telefon");
                        korisnik.Email = r.GetString("email");
                        korisnik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        korisnik.Slika = r.GetString("slika");
                    }
                    r.Close();
                    c.Dispose();
                    return korisnik;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Korisnik update(Korisnik entity)
            {
                try
                {
                    c = new MySqlCommand("UPDATE korisnik SET username = @Username, password = @Password, tip = @Tip, ime = @Ime, prezime = @Prezime, jmbg = @JMBG, datum_rodjenja = @DatumRodjenja, adresa = @Adresa, telefon = @Telefon, email = @Email, drzavljanstvo = @Drzavljanstvo, slika = @Slika where id = @ID;", con);
                    c.Parameters.AddWithValue("@Username", entity.Username);
                    c.Parameters.AddWithValue("@Password", entity.Password);
                    c.Parameters.AddWithValue("@Tip", entity.Tip);
                    c.Parameters.AddWithValue("@Ime", entity.Ime);
                    c.Parameters.AddWithValue("@Prezime", entity.Prezime);
                    c.Parameters.AddWithValue("@JMBG", entity.JMBG);
                    c.Parameters.AddWithValue("@DatumRodjenja", entity.DatumRodjenja);
                    c.Parameters.AddWithValue("@Adresa", entity.Adresa);
                    c.Parameters.AddWithValue("@Telefon", entity.Telefon);
                    c.Parameters.AddWithValue("@Email", entity.Email);
                    c.Parameters.AddWithValue("@Drzavljanstvo", entity.Drzavljanstvo);
                    c.Parameters.AddWithValue("@Slika", entity.Slika);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    c.ExecuteNonQuery();
                    return entity;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(Korisnik entity)
            {
                try
                {
                    c = new MySqlCommand("delete from korisnik where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    c.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Korisnik getById(int id)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", id);
                    MySqlDataReader r = c.ExecuteReader();
                    Korisnik korisnik = new Korisnik();
                    if (r.Read())
                    {
                        korisnik.ID = r.GetInt32("id");
                        korisnik.Username = r.GetString("username");
                        korisnik.Password = r.GetString("password");
                        korisnik.Tip = r.GetString("tip");
                        korisnik.Ime = r.GetString("ime");
                        korisnik.Prezime = r.GetString("prezime");
                        korisnik.JMBG = r.GetString("jmbg");
                        korisnik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        korisnik.Adresa = r.GetString("adresa");
                        korisnik.Telefon = r.GetString("telefon");
                        korisnik.Email = r.GetString("email");
                        korisnik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        korisnik.Slika = r.GetString("slika");
                    }
                    r.Close();
                    c.Dispose();
                    return korisnik;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            public Korisnik returnLogIn(string name, string pass)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik where username = @Name and password = @Pass;", con);
                    c.Parameters.AddWithValue("@Name", name);
                    c.Parameters.AddWithValue("@Pass", pass);
                    MySqlDataReader r = c.ExecuteReader();
                    Korisnik korisnik = new Korisnik();
                    if (r.Read())
                    {
                        korisnik.ID = r.GetInt32("id");
                        korisnik.Username = r.GetString("username");
                        korisnik.Password = r.GetString("password");
                        korisnik.Tip = r.GetString("tip");
                        korisnik.Ime = r.GetString("ime");
                        korisnik.Prezime = r.GetString("prezime");
                        korisnik.JMBG = r.GetString("jmbg");
                        korisnik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        korisnik.Adresa = r.GetString("adresa");
                        korisnik.Telefon = r.GetString("telefon");
                        korisnik.Email = r.GetString("email");
                        korisnik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        korisnik.Slika = r.GetString("slika");
                    }
                    r.Close();
                    c.Dispose();
                    return korisnik;
                }
                catch(Exception e)
                {
                    throw e;
                }
            }
            public List<Korisnik> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik where @Kolona = @Vrijednost;", con);
                    c.Parameters.AddWithValue("@Kolona", name);
                    c.Parameters.AddWithValue("@Vrijednost", value);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Korisnik> korisnici = new List<Korisnik>();
                    while (r.Read())
                    {
                        Korisnik korisnik = new Korisnik();
                        korisnik.ID = r.GetInt32("id");
                        korisnik.Username = r.GetString("username");
                        korisnik.Password = r.GetString("password");
                        korisnik.Tip = r.GetString("tip");
                        korisnik.Ime = r.GetString("ime");
                        korisnik.Prezime = r.GetString("prezime");
                        korisnik.JMBG = r.GetString("jmbg");
                        korisnik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        korisnik.Adresa = r.GetString("adresa");
                        korisnik.Telefon = r.GetString("telefon");
                        korisnik.Email = r.GetString("email");
                        korisnik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        korisnik.Slika = r.GetString("slika");
                        korisnici.Add(korisnik);
                    }
                    r.Close();
                    c.Dispose();
                    return korisnici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            #endregion
        }
    }
}
